/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package reloj.DAO;

import reloj.utiles.Util;
import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author Dianita
 */
public class ConsultasBD {

    List lista;

    // consulta de todos los usuarios
    public List listaUsuario() {
        lista = new ArrayList();
        String query = "Select p from Usuario p";

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }
        return lista;
    }

    public List PersonalxCedula(String cedula) {
        lista = new ArrayList();
        String query = "Select p from Personal p where p.cedula=" + cedula;

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }

        return lista;
    }

    public List buscarPOR(String tabla, String columna, String valor) {
        lista = new ArrayList();
        String query = "Select p from " + tabla + " p where p." + columna + "=" + valor;

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }

        return lista;
    }

    public List insertarQuery(String query) {
        lista = new ArrayList();

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }

        return lista;
    }

    public List buscarPersonal(String valor) {
        lista = new ArrayList();
        String query = "Select b from Personal b where b.cargo=" + valor;

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }

        return lista;
    }

    public List listaTablas(String tabla) {
        lista = new ArrayList();
        String query = "Select p from " + tabla + " p";

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }

        return lista;
    }

    //
    public List UsuariosNombreContraseña(String usuario) {
        lista = new ArrayList();

        String query = "Select p from Usuario p where p.nombreUsuario ='" + usuario + "'";//+" and p.contraseña='"+contraseña+"'";

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }

        return lista;
    }

    //String query = "select count(" + columna + ") from " + tabla;
    public List numero(String tabla, String atributo, int valor) {
        lista = new ArrayList();


        String query = "Select p from " + tabla + " p where p." + atributo + "=" + valor;

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }
        return lista;
    }

    public List buscarLIKE(String tabla, String columna, String valor) {
        lista = new ArrayList();
        String query = "Select p from " + tabla + " p where p." + columna + " like '" + valor + "%'";

        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(" no se pudo realizar la consulta ");
            return null;
        }

        return lista;
    }

    public List listarTodo(String tabla) {
        lista = new ArrayList();
        String query = "Select p from " + tabla + " p";
        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return lista;
    }

    public List listarRegistrosAsistencia(Integer idpersonal, String fecha) {
        lista = new ArrayList();

        //String query = "Select p from Usuario p where p.nombreUsuario ='" + usuario + "'";//+" and p.contraseña='"+contraseña+"'";
        String query = "Select p from Registro_Asistencia p where p.personal='" + idpersonal + "' and p.fecha='" + fecha + "'";
        try {
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return lista;
    }

    //obtener el dia laborable cuya fecha sea la especificada con su respectivo id de horario
    public List Diaslaborablespor(Integer idhorario, Date fech) {

        lista = new ArrayList();

        String fecha = new Util().formatoFecha(fech);

        //se crea un día antes de la fecha d
        Date c = fech;
        c.setDate(fech.getDate() - 1);
        String fecha2 = new Util().formatoFecha(c);

        try {
            //String query = "select p from DiaLaborable p where p.horario="+ idhorario+" and (p.fecha>= '" + fecha2 + "' and p.fecha<= '" + fecha + "')";
            String query = "select p from DiaLaborable p where p.horario=" + idhorario + " and p.fecha= '" + fecha + "'";// + fecha2 + "' and p.fecha<= '" + fecha + "')";
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();

        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return lista;
    }

    public List  ListaDeRegistrosPorFechas(Date fecha){
        lista = new ArrayList();
        Util u = new Util();
        String f = u.formatoFecha(fecha);
        try {
            String query = "Select r from Registro_Asistencia r where r.fecha = '"+f+"'";
            Query consulta = ConexionBD.em.createQuery(query);
            lista = consulta.getResultList();
        } catch (Exception e) {
            System.out.println(e);
            return null;
        }
        return lista;
    }

    public List RegistroAsistenciaPorIdPersonalOIDPermiso(Integer idPersonalO_idPermiso, String nombretabla){
        Util u = new Util();
        if(nombretabla.equals("Personal")){
            try {
                String query = "SELECT r FROM Registro_Asistencia r where r.personal= "+ idPersonalO_idPermiso;
                Query consulta = ConexionBD.em.createQuery(query);
                lista = consulta.getResultList();
            } catch (Exception e) {
                System.out.println(e);
                return null;
            }
        }else{
            if(nombretabla.equals("Permiso")){
                try {
                    String query = "SELECT r FROM Registro_Asistencia r where r.permiso= "+ idPersonalO_idPermiso;
                    Query consulta = ConexionBD.em.createQuery(query);
                    lista = consulta.getResultList();
                } catch (Exception e) {
                    System.out.println(e);
                    return null;
                }
            }
        }
        return lista;
    }

    public static void main(String[] args) {

//        for(int i=0;i<lista.size();i++){
//
//                System.out.println(((DiaLaborable)lista.get(i)).getFecha()+ " "+ fecha);
//
//                if(!new Util().validarFechasIguales(((DiaLaborable)lista.get(i)).getFecha(), new Date(fecha))){
//                    lista.remove(i)
//                }
//            }

        System.out.println(new ConsultasBD().listaUsuario());

    }
}
